home *** CD-ROM | disk | FTP | other *** search
/ QRZ! Ham Radio 8 / QRZ Ham Radio Callsign Database - Volume 8.iso / mac / files / f6fbb / ping0723.lzh / PING.PAS < prev   
Pascal/Delphi Source File  |  1992-07-23  |  7KB  |  261 lines

  1. program PING;
  2.  
  3. { OH3NWQ  turbo pascal 6.0                     }
  4. {                                              }
  5. { to study the route and forwarding times      }
  6. {                                              }
  7. { syntax:                                      }
  8. {        SP PING @ OH3RBR.FIN.EU               }
  9. {        @ OH3NWQ.FIN.EU                       }
  10. {        This text is sent back to you         }
  11. {                                              }
  12. { or:                                          }
  13. {        SP PING @ OH3RBR.FIN.EU               }
  14. {        OH3NWQ.FIN.EU                         }
  15. {        This text is sent back to you         }
  16. {                                              }
  17. { if the return bbs is not given in the        }
  18. { title, this programme tries to find it       }
  19. { from the R:9... lines.                       }
  20. { I.e. it picks the last one of them.          }
  21.  
  22. uses dos;
  23.  
  24. type
  25.     pitkajono = string[80];
  26.  
  27. const
  28.     copyright = 'PING for FBB 5.14 v.1992-07-23 by OH3NWQ @ OH3RBR.FIN.EU';
  29.  
  30. var
  31.    kutsu,mista,mihin,
  32.    missa,tiedot,palautus         : pitkajono;
  33.  
  34.  
  35. function merkiksi(jono : string) : char;
  36. begin
  37.   merkiksi := jono[1];
  38. end;
  39.  
  40.  
  41. function r_rivit(mista : string) : string;
  42. var
  43.    rivi, vrivi   : pitkajono;
  44.    sisaan        : text;
  45.    paikka        : integer;
  46.  
  47. begin
  48.      assign(sisaan,mista);
  49.      reset (sisaan);
  50.      readln(sisaan,rivi);
  51.      readln(sisaan,rivi);
  52.  
  53.      repeat
  54.          begin
  55.              vrivi := rivi;
  56.              readln(sisaan,rivi);
  57.          end;
  58.      until ((copy(rivi,1,3) <> 'R:9') or (eof(sisaan)));
  59.      
  60.      paikka := pos('@:',vrivi);
  61.  
  62.      if paikka = 0 then halt(0);
  63.  
  64.      vrivi   := copy(vrivi,paikka+2,80);
  65.      vrivi   := copy(vrivi,1,pos(' ',vrivi));
  66.  
  67.      r_rivit := vrivi;
  68.      close(sisaan);
  69. end;
  70.  
  71.  
  72. procedure lue_parametrit(var tiedosto,hakemisto:pitkajono);
  73.  
  74. begin
  75.      tiedosto   := 'MAIL.IN';
  76.      hakemisto  := 'C:\FBB\';
  77. end;
  78.  
  79. function leadingzero(sana : word) : string;
  80. var
  81.    jono : string;
  82. begin
  83.      str(sana:0,jono);
  84.      if length(jono) = 1 then
  85.         jono := '0' + jono;
  86.      leadingzero := jono;
  87. end;
  88.  
  89.  
  90. procedure hae_osoite(hmista : pitkajono ; var vastausos : pitkajono);
  91.  
  92. var
  93.    sisaan                           : text;
  94.    ekarivi, tokarivi, apu           : pitkajono;
  95.    paikka, pituus, k, kir, nro, pis : integer;
  96.    merkki                           : char;
  97.    parsittava                       : boolean;
  98.  
  99. begin
  100.      apu        := '';
  101.      parsittava := false;
  102.      kir        := 0;
  103.      nro        := 0;
  104.      pis        := 0;
  105.      vastausos  := 'SP ';
  106.  
  107.      assign(sisaan,hmista);
  108.      reset (sisaan);
  109.      readln(sisaan,ekarivi);
  110.      readln(sisaan,tokarivi);
  111.      close (sisaan);
  112.  
  113.      paikka := pos('<',ekarivi);
  114.      pituus := length(ekarivi);
  115.  
  116.      for k := paikka+1 to pituus do
  117.          begin
  118.             if copy(ekarivi,k,1) > ' ' then
  119.                vastausos := vastausos+copy(ekarivi,k,1);
  120.          end;
  121.  
  122.      pituus := length(tokarivi);
  123.  
  124.      for k := 1 to pituus do
  125.         if copy(tokarivi,k,1) > ' ' then
  126.            apu := apu+copy(tokarivi,k,1);
  127.  
  128.      while pos('@',apu)>0 do
  129.         apu := copy(apu,pos('@',apu)+1,80);
  130.  
  131.      pituus := length(apu);
  132.  
  133.      for k := 1 to pituus do
  134.      begin
  135.           merkki := merkiksi(copy(apu,k,1));
  136.           case merkki of '0'..'9'        : inc(nro);
  137.                          'A'..'Z'        : inc(kir);
  138.                          'a'..'z'        : inc(kir);
  139.                          '.'             : inc(pis);
  140.                          '*'             : parsittava := true;
  141.                          '?'             : parsittava := true;
  142.                          '$'             : parsittava := true;
  143.                          '<'             : parsittava := true;
  144.                          chr(1)..chr(31) : parsittava := true;
  145.                          '['..'`'        : parsittava := true;
  146.                          '{'..chr(255)   : parsittava := true;
  147.                          end;
  148.      end;
  149.  
  150.      if (nro = 0) then parsittava := true;
  151.      if (kir = 0) then parsittava := true;
  152.  
  153.      if (parsittava = false) then
  154.      begin
  155.          if pis = 0 then
  156.             begin
  157.                 if ((pituus >= 3) and ((nro = 1) or
  158.                    (nro = 2)) and (kir >= 2))
  159.                    then vastausos := vastausos + ' @ ' + apu;
  160.             end
  161.             else
  162.             begin
  163.                 if ((pituus >= 10) and (nro >= 1) and
  164.                    (kir >= 7) and (kir >= pis))
  165.                    then vastausos := vastausos + ' @ ' + apu;
  166.             end;
  167.      end else
  168.      begin
  169.             vastausos := vastausos + ' @ ' + r_rivit(hmista);
  170.      end;
  171. end;
  172.  
  173.  
  174. procedure aloita_vastaus(osoite,imprtfile,polku : pitkajono);
  175.  
  176. const
  177.   days : array [0..6] of string[9] =
  178.          ('Sunday','Monday','Tuesday','Wednesday',
  179.          'Thursday','Friday','Saturday');
  180.  
  181. var
  182.    ulos               : text;
  183.    ho, mi, se, hund,
  184.    ye, mo, da, dow    : word;
  185.  
  186. begin
  187.  
  188.      if fsearch(imprtfile,polku) = '' then
  189.         begin
  190.            assign(ulos,polku+imprtfile);
  191.            rewrite(ulos);
  192.            close(ulos);
  193.         end;
  194.  
  195.      assign(ulos,polku+imprtfile);
  196.      append(ulos);
  197.  
  198.      writeln(ulos,osoite);
  199.      writeln(ulos,'RE: * Ping server *');
  200.      writeln(ulos);
  201.      writeln(ulos,copyright);
  202.      gettime(ho,mi,se,hund);
  203.      getdate(ye,mo,da,dow);
  204.      writeln(ulos,'Pinged at ', days[dow],', ',ye:0, '-',
  205.                   leadingzero(mo), '-',leadingzero(da),'  ',
  206.                   leadingzero(ho),':',leadingzero(mi),':',
  207.                   leadingzero(se),'.',leadingzero(hund));
  208.      writeln(ulos);
  209.      close(ulos);
  210. end;
  211.  
  212.  
  213. procedure pingaa_rivit(mikatied,imprtfile,polku : pitkajono);
  214.  
  215. var
  216.    sisaan, ulos    : text;
  217.    rivi            : pitkajono;
  218.  
  219. begin
  220.  
  221.      assign(ulos,polku+imprtfile);
  222.      append(ulos);
  223.  
  224.      assign(sisaan,mikatied);
  225.      reset (sisaan);
  226.  
  227.      repeat
  228.            begin
  229.                  readln  (sisaan,rivi);
  230.                  rivi := copy(rivi,1,73);
  231.                  if not (copy(rivi,1,3)='/EX') then
  232.                         writeln (ulos,'PING> ',rivi);
  233.            end;
  234.      until (eof(sisaan)) or (copy(rivi,1,3)='/EX');
  235.  
  236.      writeln(ulos);
  237.      writeln(ulos,'End of PING - I''m alive.');
  238.      writeln(ulos,'/EX');
  239.      close  (ulos);
  240.      close  (sisaan);
  241. end;
  242.  
  243.  
  244. begin   {Pääohjelma}
  245.  
  246.      if paramcount < 1 then
  247.         begin
  248.              writeln(copyright);
  249.              writeln('Ping is a server for a FBB 5.14 mailbox');
  250.              halt(0);
  251.         end;
  252.  
  253.      mista := paramstr(1);
  254.  
  255.      lue_parametrit(mihin,missa);
  256.      hae_osoite(mista,palautus);
  257.  
  258.      aloita_vastaus(palautus,mihin,missa);
  259.      pingaa_rivit(mista,mihin,missa);
  260. end.
  261.